﻿/***************************************************************************
	Copyright (C) 2010 RapidWebDev Organization (Author: Eunge, Legal Name: Jian Liu, Email: eunge.liu@gmail.com)

	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with this program.  If not, see <http://www.gnu.org/licenses/>.
 ***************************************************************************/

using System;
using System.Data;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml;

namespace BaoJianSoft.Web.Extensions.DynamicPages
{
	/// <summary>
	/// Class to configure generic button configuration.
	/// </summary>
	[Serializable]
	public class ButtonConfiguration
	{
		private string text;

		/// <summary>
		/// Sets/gets command argument of generic button.
		/// </summary>
		public string CommandArgument { get; set; }

		/// <summary>
		/// Sets/gets generic button display text.
		/// </summary>
		public string Text
		{
			set { this.text = value; }
			get { return WebUtility.FormatDisplayText(this.text); }
		}

		/// <summary>
		/// Sets/gets generic button image URL.
		/// </summary>
		public string ImageUrl { get; set; }

		/// <summary>
		/// Sets/gets javascript code fires when client click on button.
		/// </summary>
		public string OnClientClick { get; set; }

		/// <summary>
		/// Sets/gets link button type.
		/// </summary>
		public ButtonTypes Type { get; set; }

		/// <summary>
		/// Gets enumerable script reference urls.
		/// </summary>
		public Collection<string> ScriptReferenceUrls { get; set; }

		/// <summary>
		/// Empty Constructor
		/// </summary>
		public ButtonConfiguration()
		{
			this.ScriptReferenceUrls = new Collection<string>();
		}

		/// <summary>
		/// Construct ButtonConfiguration instance from xml element.
		/// </summary>
		/// <param name="buttonElement"></param>
		/// <param name="xmlParser"></param>
		public ButtonConfiguration(XmlElement buttonElement, XmlParser xmlParser)
		{
			this.Text = xmlParser.ParseString(buttonElement, "@Text");
			this.ImageUrl = xmlParser.ParseString(buttonElement, "@ImageUrl");
			this.CommandArgument = xmlParser.ParseString(buttonElement, "@CommandArgument");
			this.Type = xmlParser.ParseEnum<ButtonTypes>(buttonElement, "@Type");

			this.ScriptReferenceUrls = new Collection<string>();
		}
	}

	/// <summary>
	/// LinkButton type.
	/// </summary>
	public enum ButtonTypes
	{
		Link, NewImage, EditImage, DeleteImage, ViewImage, CustomImage, Button
	}
}

